package com.randi.file.enums;

import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.Getter;

import java.io.Serializable;
import java.util.Arrays;
import java.util.stream.Stream;

/**
 * 文件格式
 *
 * @author ziye
 */
public enum FileTypeEnum {

    /**
     * 图片
     */
    IMAGE("image", "图片"),
    /**
     * 视频
     */
    VIDEO("video", "视频"),
    /**
     * 音频
     */
    AUDIO("audio", "音频"),
    /**
     * 文档
     */
    DOCUMENT("document", "文档"),
    /**
     * 压缩文件
     */
    ARCHIVE("archive", "压缩文件"),
    /**
     * 应用程序
     */
    APP("app", "应用程序"),
    /**
     * 其他
     */
    OTHER("other", "其他");

    @EnumValue
    private final String value;

    private final String label;

    private FileTypeEnum(String value, String label) {
        this.value = value;
        this.label = label;
    }

    public String getValue() {
        return value;
    }

    public String getLabel() {
        return label;
    }

    public static FileTypeEnum valueOfAuto(String value) {
        return Arrays.stream(FileTypeEnum.values())
                .filter(typeEnum -> Stream.of(
                        typeEnum.name(),
                        typeEnum.getValue(),
                        typeEnum.getLabel()
                ).anyMatch(v -> v.equalsIgnoreCase(value)))
                .findFirst()
                .orElse(OTHER);
    }

    public static FileTypeEnum valueOfAuto(FileTypeEnum value) {
        return Arrays.stream(FileTypeEnum.values())
                .filter(typeEnum -> typeEnum.equals(value))
                .findFirst()
                .orElse(OTHER);
    }

    @Override
    public String toString() {
        return "FileTypeEnum{" +
                "value='" + value + '\'' +
                ", label='" + label + '\'' +
                '}';
    }
}
